{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "import warnings\n",
    "# Ignore numpy dtype warnings. These warnings are caused by an interaction\n",
    "# between numpy and Cython and can be safely ignored.\n",
    "# Reference: https://stackoverflow.com/a/40846742\n",
    "warnings.filterwarnings(\"ignore\", message=\"numpy.dtype size changed\")\n",
    "warnings.filterwarnings(\"ignore\", message=\"numpy.ufunc size changed\")\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "%matplotlib inline\n",
    "import ipywidgets as widgets\n",
    "from ipywidgets import interact, interactive, fixed, interact_manual\n",
    "import nbinteract as nbi\n",
    "\n",
    "sns.set()\n",
    "sns.set_context('talk')\n",
    "np.set_printoptions(threshold=20, precision=2, suppress=True)\n",
    "pd.options.display.max_rows = 7\n",
    "pd.options.display.max_columns = 8\n",
    "pd.set_option('precision', 2)\n",
    "# This option stops scientific notation for pandas\n",
    "# pd.set_option('display.float_format', '{:.2f}'.format)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "def df_interact(df, nrows=7, ncols=7):\n",
    "    '''\n",
    "    Outputs sliders that show rows and columns of df\n",
    "    '''\n",
    "    def peek(row=0, col=0):\n",
    "        return df.iloc[row:row + nrows, col:col + ncols]\n",
    "    if len(df.columns) <= ncols:\n",
    "        interact(peek, row=(0, len(df) - nrows, nrows), col=fixed(0))\n",
    "    else:\n",
    "        interact(peek,\n",
    "                 row=(0, len(df) - nrows, nrows),\n",
    "                 col=(0, len(df.columns) - ncols))\n",
    "    print('({} rows, {} columns) total'.format(df.shape[0], df.shape[1]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "X1rLzRsW37jc"
   },
   "source": [
    "# Cross-Validation\n",
    "\n",
    "In the previous section, we observed that we needed a more accurate way of simulating the test error to manage the bias-variance trade off. To reiterate, training error is misleadingly low, because we are fitting our model on the training set. We need to choose a model without using the test set, so we split our training set again, into a validation set. Cross-validation provides a method of estimating our model error using a single observed dataset by separating data used for training from the data used for model selection and final accuracy. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train-Validation-Test Split\n",
    "\n",
    "One way to accomplish this is to split the original dataset into three disjoint subsets:\n",
    "\n",
    "* Training set: The data used to fit the model.\n",
    "* Validation set: The data used to select features.\n",
    "* Test set: The data used to report the model's final accuracy.\n",
    "\n",
    "After splitting, we select a set of features and a model based on the following procedure:\n",
    "\n",
    "1. For each potential set of features, fit a model using the training set. The error of a model on the training set is its *training error*.\n",
    "1. Check the error of each model on the validation set: its *validation error*. Select the model that achieves the lowest validation error. This is the final choice of features and model.\n",
    "1. Calculate the *test error*, error of the final model on the test set. This is the final reported accuracy of the model. We are forbidden from adjusting the features or model to decrease test error; doing so effectively converts the test set into a validation set. Instead, we must collect a new test set after making further changes to the features or the model.\n",
    "\n",
    "This process allows us to more accurately determine the model to use than using the training error alone. By using cross-validation, we can test our model on data that it wasn't fit on, simulating test error without using the test set. This gives us a sense of how our model performs on unseen data.  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Size of the train-validation-test split**\n",
    "\n",
    "The train-validation-test split commonly uses 70% of the data as the training set, 15% as the validation set, and the remaining 15% as the test set. Increasing the size of the training set helps model accuracy but causes more variation in the validation and test error. This is because a smaller validation set and test set are less representative of the sample data."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Training Error and Test Error\n",
    "\n",
    "A model is of little use to us if it fails to generalize to unseen data from the population. The test error provides the most accurate representation of the model's performance on new data since we do not use the test set to train the model or select features.\n",
    "\n",
    "In general, the training error decreases as we add complexity to our model with additional features or more complex prediction mechanisms. The test error, on the other hand, decreases up to a certain amount of complexity then increases again as the model overfits the training set. This is due the fact that at first, bias decreases more than variance increases. Eventually, the increase in variance surpasses the decrease in bias. \n",
    "![bias_cv_train_test_error](bias_cv_train_test_error.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "48opVFox3_VW"
   },
   "source": [
    "## K-Fold Cross-Validation\n",
    "\n",
    "The **train-validation-test split** method is a good method to simulate test error through the validation set. However, making the three splits results in too little data for training. Also, with this method the validation error may be prone to high variance because the evaluation of the error may depend heavily on which points end up in the training and validation sets.\n",
    "\n",
    "To tackle this problem, we can run the train-validation split multiple times on the same dataset. The dataset is divided into *k* equally-sized subsets (*$k$ folds*), and the train-validation split is repeated *k* times. Each time, one of the *k* folds is used as the validation set, and the remaining *k-1* folds are used as the training set. We report the model's final validation error as the average of the $ k $ validation errors from each trial. This method is called **k-fold cross-validation**. \n",
    "\n",
    "The diagram below illustrates the technique when using five folds:\n",
    "\n",
    "![bias_cv_5_fold_cv](bias_cv_5_fold_cv.jpg)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "NPV2Jr8_A1ES"
   },
   "source": [
    "The biggest advantage of this method is that every data point is used for validation exactly once and for training *k-1* times. Typically, a *k* between 5 to 10 is used, but *k* remains an unfixed parameter. When *k* is small, the error estimate has a lower variance (many validation points) but has a higher bias (fewer training points). Vice versa, with large *k* the error estimate has lower bias but has higher variance. \n",
    "\n",
    "$k$-fold cross-validation takes more computation time than the train-validation split since we typically have to refit each model from scratch for each fold. However, it computes a more accurate validation error by averaging multiple errors together for each model.\n",
    "\n",
    "The `scikit-learn` library provides a convenient [`sklearn.model_selection.KFold`](http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html) class to implement $k$-fold cross-validation."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Bias-Variance Tradeoff\n",
    "\n",
    "Cross-validation helps us manage the bias-variance tradeoff more accurately. Intuitively, the validation error estimates test error by checking the model's performance on a dataset not used for training; this allows us to estimate both model bias and model variance. K-fold cross-validation also incorporates the fact that the noise in the test set only affects the noise term in the bias-variance decomposition whereas the noise in the training set affects both bias and model variance. To choose the final model to use, we select the one that has the lowest validation error.\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example: Model Selection for Ice Cream Ratings\n",
    "We will use the complete model selection process, including cross-validation, to select a model that predicts ice cream ratings from ice cream sweetness. The complete ice cream dataset and a scatter plot of the overall rating versus ice cream sweetness are shown below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "ice = pd.read_csv('icecream.csv')\n",
    "transformer = PolynomialFeatures(degree=2)\n",
    "X = transformer.fit_transform(ice[['sweetness']])\n",
    "\n",
    "clf = LinearRegression(fit_intercept=False).fit(X, ice[['overall']])\n",
    "xs = np.linspace(3.5, 12.5, 300).reshape(-1, 1)\n",
    "rating_pred = clf.predict(transformer.transform(xs))\n",
    "\n",
    "temp = pd.DataFrame(xs, columns = ['sweetness'])\n",
    "temp['overall'] = rating_pred\n",
    "\n",
    "np.random.seed(42)\n",
    "x_devs = np.random.normal(scale=0.2, size=len(temp))\n",
    "y_devs = np.random.normal(scale=0.2, size=len(temp))\n",
    "temp['sweetness'] = np.round(temp['sweetness'] + x_devs, decimals=2)\n",
    "temp['overall'] = np.round(temp['overall'] + y_devs, decimals=2)\n",
    "\n",
    "ice = pd.concat([temp, ice])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sweetness</th>\n",
       "      <th>overall</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3.60</td>\n",
       "      <td>3.09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>3.50</td>\n",
       "      <td>3.17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3.69</td>\n",
       "      <td>3.46</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>11.00</td>\n",
       "      <td>5.90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>11.70</td>\n",
       "      <td>5.50</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>11.90</td>\n",
       "      <td>5.40</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>309 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    sweetness  overall\n",
       "0        3.60     3.09\n",
       "1        3.50     3.17\n",
       "2        3.69     3.46\n",
       "..        ...      ...\n",
       "6       11.00     5.90\n",
       "7       11.70     5.50\n",
       "8       11.90     5.40\n",
       "\n",
       "[309 rows x 2 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ice"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2012e5e8fd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(ice['sweetness'], ice['overall'], s=10)\n",
    "plt.title('Ice Cream Rating vs. Sweetness')\n",
    "plt.xlabel('Sweetness')\n",
    "plt.ylabel('Rating');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Using degree 10 polynomial features on 9 random points from the dataset result in a perfectly accurate model for those data points. Unfortunately, this model fails to generalize to previously unseen data from the population."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "ice2 = pd.read_csv('icecream.csv')\n",
    "trans_ten = PolynomialFeatures(degree=10)\n",
    "X_ten = trans_ten.fit_transform(ice2[['sweetness']])\n",
    "y = ice2['overall']\n",
    "\n",
    "clf_ten = LinearRegression(fit_intercept=False).fit(X_ten, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2012e6e1a20>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.random.seed(1)\n",
    "x_devs = np.random.normal(scale=0.4, size=len(ice2))\n",
    "y_devs = np.random.normal(scale=0.4, size=len(ice2))\n",
    "\n",
    "plt.figure(figsize=(10, 5))\n",
    "\n",
    "plt.subplot(121)\n",
    "plt.scatter(ice2['sweetness'], ice2['overall'])\n",
    "xs = np.linspace(3.5, 12.5, 1000).reshape(-1, 1)\n",
    "ys = clf_ten.predict(trans_ten.transform(xs))\n",
    "plt.plot(xs, ys)\n",
    "plt.title('Degree 10 polynomial fit')\n",
    "plt.ylim(3, 7);\n",
    "\n",
    "plt.subplot(122)\n",
    "ys = clf_ten.predict(trans_ten.transform(xs))\n",
    "plt.plot(xs, ys)\n",
    "plt.scatter(ice2['sweetness'] + x_devs,\n",
    "            ice2['overall'] + y_devs,\n",
    "            c='g')\n",
    "plt.title('Degree 10 poly, second set of data')\n",
    "plt.ylim(3, 7);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Instead of the above method, we first partition our data into training, validation, and test datasets using `scikit-learn`'s [`sklearn.model_selection.train_test_split`](http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html) method to perform a 70/30% train-test split."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  Training set size: 217\n",
      "      Test set size: 92\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "test_size = 92\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(\n",
    "    ice[['sweetness']], ice['overall'], test_size=test_size, random_state=0)\n",
    "\n",
    "\n",
    "print(f'  Training set size: {len(X_train)}')\n",
    "print(f'      Test set size: {len(X_test)}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We now fit polynomial regression models using the training set, one for each polynomial degree from 1 to 10."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[     1.  ,      8.8 ,     77.44,    681.47,   5996.95,  52773.19],\n",
       "       [     1.  ,     10.74,    115.35,   1238.83,  13305.07, 142896.44],\n",
       "       [     1.  ,      9.98,     99.6 ,    994.01,   9920.24,  99003.99],\n",
       "       ...,\n",
       "       [     1.  ,      6.79,     46.1 ,    313.05,   2125.59,  14432.74],\n",
       "       [     1.  ,      5.13,     26.32,    135.01,    692.58,   3552.93],\n",
       "       [     1.  ,      8.66,     75.  ,    649.46,   5624.34,  48706.78]])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "\n",
    "# First, we add polynomial features to X_train\n",
    "transformers = [PolynomialFeatures(degree=deg)\n",
    "                for deg in range(1, 11)]\n",
    "X_train_polys = [transformer.fit_transform(X_train)\n",
    "                 for transformer in transformers]\n",
    "\n",
    "# Display the X_train with degree 5 polynomial features\n",
    "X_train_polys[4]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We will then perform 5-fold cross-validation on the 10 featurized datasets. To do so, we will define a function that:\n",
    "1. Uses the [`KFold.split`](http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html) function to get 5 splits on the training data. Note that `split` returns the indices of the data for that split.\n",
    "2. For each split, select out the rows and columns based on the split indices and features.\n",
    "3. Fit a linear model on the training split.\n",
    "4. Compute the mean squared error on the validation split.\n",
    "5. Return the average error across all cross validation splits."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import KFold\n",
    "\n",
    "def mse_cost(y_pred, y_actual):\n",
    "    return np.mean((y_pred - y_actual) ** 2)\n",
    "\n",
    "def compute_CV_error(model, X_train, Y_train):\n",
    "    kf = KFold(n_splits=5)\n",
    "    validation_errors = []\n",
    "    \n",
    "    for train_idx, valid_idx in kf.split(X_train):\n",
    "        # split the data\n",
    "        split_X_train, split_X_valid = X_train[train_idx], X_train[valid_idx]\n",
    "        split_Y_train, split_Y_valid = Y_train.iloc[train_idx], Y_train.iloc[valid_idx]\n",
    "\n",
    "        # Fit the model on the training split\n",
    "        model.fit(split_X_train,split_Y_train)\n",
    "        \n",
    "        # Compute the RMSE on the validation split\n",
    "        error = mse_cost(split_Y_valid,model.predict(split_X_valid))\n",
    "        \n",
    "        validation_errors.append(error)\n",
    "    \n",
    "    #average validation errors\n",
    "    return np.mean(validation_errors)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# We train a linear regression classifier for each featurized dataset and perform cross-validation\n",
    "# We set fit_intercept=False for our linear regression classifier since \n",
    "# the PolynomialFeatures transformer adds the bias column for us.\n",
    "\n",
    "cross_validation_errors = [compute_CV_error(LinearRegression(fit_intercept=False), X_train_poly, y_train)\n",
    "                     for X_train_poly in X_train_polys]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Validation Error</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Degree</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.324820</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.045060</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.045418</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.045282</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.046272</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.046715</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.047140</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.047540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.048055</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0.047805</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Validation Error\n",
       "Degree                  \n",
       "1               0.324820\n",
       "2               0.045060\n",
       "3               0.045418\n",
       "4               0.045282\n",
       "5               0.046272\n",
       "6               0.046715\n",
       "7               0.047140\n",
       "8               0.047540\n",
       "9               0.048055\n",
       "10              0.047805"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cv_df = pd.DataFrame({'Validation Error': cross_validation_errors}, index=range(1, 11))\n",
    "cv_df.index.name = 'Degree'\n",
    "pd.options.display.max_rows = 20\n",
    "display(cv_df)\n",
    "pd.options.display.max_rows = 7"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that as we use higher degree polynomial features, the validation error decreases and increases again."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2012e9df828>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10, 5))\n",
    "\n",
    "plt.subplot(121)\n",
    "plt.plot(cv_df.index, cv_df['Validation Error'])\n",
    "plt.scatter(cv_df.index, cv_df['Validation Error'])\n",
    "plt.title('Validation Error vs. Polynomial Degree')\n",
    "plt.xlabel('Polynomial Degree')\n",
    "plt.ylabel('Validation Error');\n",
    "\n",
    "plt.subplot(122)\n",
    "plt.plot(cv_df.index, cv_df['Validation Error'])\n",
    "plt.scatter(cv_df.index, cv_df['Validation Error'])\n",
    "plt.ylim(0.044925, 0.05)\n",
    "plt.title('Zoomed In')\n",
    "plt.xlabel('Polynomial Degree')\n",
    "plt.ylabel('Validation Error')\n",
    "\n",
    "plt.tight_layout();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Examining the validation errors reveals that the most accurate model only used degree 2 polynomial features. Thus, we select the degree 2 polynomial model as our final model and fit it on the all of the training data at once. Then, we compute its error on the test set."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Degree 2 polynomial\n",
      "  Training error: 0.04409\n",
      "Validation error: 0.04506\n",
      "      Test error: 0.04698\n"
     ]
    }
   ],
   "source": [
    "best_trans = transformers[1]\n",
    "best_model = LinearRegression(fit_intercept=False).fit(X_train_polys[1], y_train)\n",
    "\n",
    "training_error = mse_cost(best_model.predict(X_train_polys[1]), y_train)\n",
    "validation_error = cross_validation_errors[1]\n",
    "test_error = mse_cost(best_model.predict(best_trans.transform(X_test)), y_test)\n",
    "\n",
    "print('Degree 2 polynomial')\n",
    "print(f'  Training error: {training_error:0.5f}')\n",
    "print(f'Validation error: {validation_error:0.5f}')\n",
    "print(f'      Test error: {test_error:0.5f}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For future reference, `scikit-learn` has a [`cross_val_predict`](http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.cross_val_predict.html) method to automatically perform cross-validation, so we don't have to break the data into training and validation sets ourselves. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Also, note that the test error is higher than the validation error which is higher than the training error. The training error should be the lowest because the model is fit on the training data. Fitting the model minimizes the mean squared error for that dataset. The validation error and the test error are usually higher than the training error because the error is computed on an unknown dataset that the model hasn't seen."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "EHnBEAmGnb6M"
   },
   "source": [
    "## Summary\n",
    "\n",
    "We use the widely useful cross-validation technique to manage the bias-variance tradeoff. After computing a train-validation-test split on the original dataset, we use the following procedure to train and choose a model.\n",
    "\n",
    "1. For each potential set of features, fit a model using the training set. The error of a model on the training set is its *training error*.\n",
    "1. Check the error of each model on the validation set using $k$-fold cross-validation: its *validation error*. Select the model that achieves the lowest validation error. This is the final choice of features and model.\n",
    "1. Calculate the *test error*, error of the final model on the test set. This is the final reported accuracy of the model. We are forbidden from adjusting the model to increase test error; doing so effectively converts the test set into a validation set. Instead, we must collect a new test set after making further changes to the model."
   ]
  }
 ],
 "metadata": {
  "colab": {
   "collapsed_sections": [],
   "default_view": {},
   "name": "Cross Validation.ipynb",
   "provenance": [],
   "version": "0.3.2",
   "views": {}
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  },
  "toc": {
   "nav_menu": {},
   "number_sections": false,
   "sideBar": false,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": true,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
